﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static HighPerformanceLog.V1.HWLogger;

namespace HighPerformanceLog.V1
{
    internal class Tester : IRunnable
    {
        public void Run()
        {
            HWLog log = new HWLog();
            Functions.AttachStackFrameToLog(log);
            Console.WriteLine(log);
        }

        public void test2()
        {
            SetLogFilepath($"{DateTime.Now:yyyy-MM-dd}.log");
            try
            {
                // 可以使用几个函数进行数据记录
                DebugLog("Hello1", LogCategory.IO);
                SaveLogs();

                // 如果输出修改了，则指定不输出的内容不再输出。
                SetLogLevels(LogSeverity.FATAL, LogSeverity.ERROR, LogSeverity.WARNING, LogSeverity.INFO);
                DebugLog("debug.message", LogCategory.IO);
                ErrorLog("error.message", LogCategory.IO);
                FatalLog("fatal.message", LogCategory.IO);
                SaveLogs();

                // try-catch中的内容可以在catch中进行记录。
                try
                {
                    // 这个文件肯定是不存在，所以会引发异常。
                    Console.WriteLine(File.ReadAllText("D:\\data\\abcd1234.text1"));
                }
                catch (Exception ex)
                {
                    ErrorLog(ex.Message);
                }
                SaveLogs();


                // 排他测试
                SetInclusives("错误");  // 即使已经排除了“系统”，但是即使有“系统”如果还包括“错误”仍然会被记录。
                SetExclusives("系统");  // 所有带有系统的日志都会排除。
                DebugLog("这里是测试用的");
                FatalLog("系统出现重大错误退出，日志已记录。");
                FatalLog("系统内存不足，需要重置或清空。");
                InfoLog($"这里收集的一线程数据 \t Tid={Thread.CurrentThread.ManagedThreadId}.");
            }
            catch (Exception ex)
            {
                // 系统如果异常退出，会记录相关信息。
                FatalLog(ex.Message);
            }
            finally
            {
                InfoLog("App Existed.");
                ExitLogger();
            }
        }

        public void test1()
        {
            HWLogger lg = new HWLogger(Thread.CurrentThread);
            lg.LogFilepath = $"{DateTime.Now:yyyy-MM-dd}.log";
            try
            {
                // 可以使用几个函数进行数据记录
                lg.Debug("Hello1", LogCategory.IO);
                lg.Save();

                // 如果输出修改了，则指定不输出的内容不再输出。
                lg.Debug("Hello2", LogCategory.IO);
                lg.LogOutputLevels = new LogSeverity[] { LogSeverity.FATAL, LogSeverity.ERROR, LogSeverity.WARNING, LogSeverity.INFO };
                lg.Save();

                // try-catch中的内容可以在catch中进行记录。
                try
                {
                    Console.WriteLine(File.ReadAllText("D:\\data\\abcd1234.text1"));
                }
                catch (Exception ex)
                {
                    lg.Error(ex.Message);
                }
                lg.Save();


                // 排他测试
                lg.Inclusives.Add("错误");  // 即使已经排除了“系统”，但是即使有“系统”如果还包括“错误”仍然会被记录。
                lg.Exclusives.Add("系统");  // 所有带有系统的日志都会排除。
                lg.Debug("这里是测试用的");
                lg.Fatal("系统出现重大错误退出，日志已记录。");
                lg.Fatal("系统内存不足，需要重置或清空。");
                lg.Info($"这里收集的一线程数据 \t Tid={Thread.CurrentThread.ManagedThreadId}.");
            }
            catch (Exception ex)
            {
                // 系统如果异常退出，会记录相关信息。
                lg.Fatal(ex.Message);
            }
            finally
            {
                lg.Info("App Existed.");
                lg.Exit();
            }

        }


    }
}
